/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package MiniProjet.modeles;

import java.io.Serializable;
import java.security.Timestamp;
import java.util.ArrayList;
import java.util.Collection;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

/**
 *
 * @author SaLaH
 */
@Entity
public class Commande implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    @OneToMany(cascade={CascadeType.ALL}, fetch=FetchType.EAGER)
    private Collection<LigneCommande> lignesCommandes;
    @ManyToOne(cascade={CascadeType.ALL}, fetch=FetchType.EAGER)
    private Utilisateur utilisateur ;
    private java.sql.Timestamp dateCommande;
    private double prixTotal;

    public Commande() {
         this.lignesCommandes = new ArrayList<LigneCommande>();
    }
  

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public java.sql.Timestamp getDateCommande() {
        return dateCommande;
    }

     public void setDateCommande(java.sql.Timestamp dateCommande) {
        this.dateCommande = dateCommande;
    }

    public double getPrixTotal() {
        return prixTotal;
    }

    public void setPrixTotal(double prixTotal) {
        this.prixTotal = prixTotal;
    }

    public Utilisateur getUtilisateur() {
        return utilisateur;
    }

    public void setUtilisateur(Utilisateur utilisateur) {
        this.utilisateur = utilisateur;
    }

    public Collection<LigneCommande> getLignesCommandes() {
        return lignesCommandes;
    }

    public void setLignesCommandes(Collection<LigneCommande> ligneCommandes) {
        this.lignesCommandes = ligneCommandes;
    }

  
    @Override
    public String toString() {
        return "MiniProjet.modeles.Commande[id=" + id + "]";
    }

     public void addCommande(LigneCommande item, int quantity, double price) {
        if (lignesCommandes == null) {
            lignesCommandes = new ArrayList<LigneCommande>();
        }
        //item.setOrder(this);
        item.setQuantite(item.getQuantite() + quantity);
        item.setTotal(item.getTotal() + (quantity * price));
        prixTotal += item.getTotal() + (quantity * price);
    }

    public void updateCommandeAndUpdateLigneCommande(LigneCommande item, int quantity, double price) {
        if (lignesCommandes == null) {
            lignesCommandes = new ArrayList<LigneCommande>();
        }
        int oldQuantity = item.getQuantite();
        item.setQuantite(quantity);
        item.setTotal(quantity * price);
        prixTotal = prixTotal - (oldQuantity * price);
        prixTotal += quantity * price;
    }

 int n = 0;

    public LigneCommande addCommandeAndLigneCommande(Film film, int quantity, double price) {

        if (lignesCommandes == null || lignesCommandes.isEmpty()) {
            lignesCommandes = new ArrayList<LigneCommande>();
        }
        LigneCommande item = new LigneCommande();
        item.setId(n);
        item.setFilm(film);
        item.setQuantite(quantity);
        item.setTotal(quantity * price);
        lignesCommandes.add(item);
        prixTotal += quantity * price;
        n = n + 1;
        return item;
    }

}
